import pandas as pd
import struct

# 输入文件名
input_file = 'data_files/库容曲线导入模板（那降）TO-2.xlsx'
# 输出文件名
output_file = 'out_data_files/TO-02-output-水位库容.bin'

df = pd.read_excel(input_file, header=0)  # 标题在第一行，这里设置header=0，数据在第二行开始

print(df)

# 定义一个函数来将浮点数转换为32位IEEE754格式的字节序列
def float_to_ieee754_bytes(value):
    """
    将浮点数转换为32位IEEE754格式的字节序列
    :param value: 浮点数
    :return: 4字节的字节序列
    .pack --> !f  大端序
    .pack --> f  小端序
    """
    return struct.pack('f', value)

# 将浮点数转换为32位IEEE754格式的无符号整数
def float_to_ieee754_uint(value):
    """
    将浮点数转换为32位IEEE754格式的无符号整数
    :param value: 浮点数
    :return: 无符号整数
    """
    return struct.unpack('<I', struct.pack('<f', value))[0]

# 使用index, iterrows()遍历DataFrame
with open(output_file, 'wb') as output_f:
    for index,row in df.iterrows():
        byte_water = float_to_ieee754_bytes(row['水位（米）'])
        output_f.write(byte_water)

        byte_capacity = float_to_ieee754_bytes(row['库容（万立方米）'])
        output_f.write(byte_capacity)

# # 使用zip()函数, 将两个列表打包在一起
# with open(output_file, 'wb') as output_f:
#     for water, capacity in zip(df['水位（米）'], df['库容（万立方米）']): # 使用zip()函数将两个列表打包在一起
#         # 写入水位
#         byte_water = float_to_ieee754_bytes(water)
#         output_f.write(byte_water)
#
#         # 写入库容
#         byte_capacity = float_to_ieee754_bytes(capacity)
#         output_f.write(byte_capacity)


    # 注释，改为将水位、库容数据一对一一起写入二进制文件中
    # # 写入水位
    # for value in df['水位（米）']:
    #     byte_sequence = float_to_ieee754_bytes(value)
    #     output_f.write(byte_sequence)
    #
    # # 写入库容
    # for value in df['库容（万立方米）']:
    #     byte_sequence = float_to_ieee754_bytes(value)
    #     output_f.write(byte_sequence)

print(f"水位和库容数据-----二进制文件： {output_file}")

# 打印转换后的十六进制字符
for column_name in ['水位（米）', '库容（万立方米）']:
    for value in df[column_name]:
        uint_value = float_to_ieee754_uint(value)
        hexs = hex(uint_value).upper()
        print(f"数值: {value} -> 转换后: {hexs}")

